#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QMenu>
#include <QAction>
#include <QVBoxLayout>
#include <QLabel>

struct WeatherInfo
{
    QString city;
    QString dateWeek;
    qint8 temp;

    QString ganMao;
    qint8 pm25;
    qint8 humidity;
    QString quality;

    QList<QString> weekList;
    QList<QString> dateList;
    QList<QString> typeList;
    QList<qint16> qualityList;
    QList<qint8> highTemp;
    QList<qint8> lowTemp;
    QList<QString> fx;
    QList<qint8> fl;

};

class Widget : public QWidget
{
    Q_OBJECT

protected:
    void contextMenuEvent(QContextMenuEvent *event) override;
    void mousePressEvent(QMouseEvent* event)override;
    void mouseMoveEvent(QMouseEvent* event)override;
    // 事件过滤器：过滤标签的 update 事件
    bool eventFilter(QObject* watched, QEvent* event)override;

private:
    QMenu* mExitMenu;//右键退出菜单
    QAction* mExitAct;//退出的行为

    QPoint mOffset;  // 窗口移动时, 鼠标与窗口左上角的偏移

    QVBoxLayout* mainLayout;//主体 布局
    QHBoxLayout* topLayout; //顶部 布局
    // ///////左侧布局
    QVBoxLayout* leftLayout;
    QLabel* lblTypeIcon;// 天气图标
    QLabel* lblTemp;      // 温度
    QLabel* lblCity;      // 城市
    QLabel* lblType;      // 天气
    QLabel* lblLowHigh;   // 高低温

    QLabel* lblGanMao;  // 感冒指数

    QLabel* lblFlIcon;  // 风力图标
    QLabel* lblFx;      // 风向
    QLabel* lblFl;      // 风力

    QLabel* lblPM25Icon;   // PM25图标
    QLabel* lblPM25Title;  // PM25标题
    QLabel* lblPM25;       // PM25值

    QLabel* lblHumidityIcon;   // 湿度图标
    QLabel* lblHumidityTitle;  // 湿度标题
    QLabel* lblHumidity;       // 湿度值

    QLabel* lblQualityIcon;   // 空气质量图标
    QLabel* lblQualityTitle;  // 空气质量标题
    QLabel* lblQuality;       // 空气质量值



    QVBoxLayout* rightLayout;//右侧布局
    QList<QLabel*> mWeekList;  // 星期
    QList<QLabel*> mDateList;  // 日期

    QList<QLabel*> mTypeList;         // 天气
    QList<QLabel*> mTypeIconList;     // 天气图标
    QMap<QString, QString> mTypeMap;  // 天气类型的map

    QList<QLabel*> mAqiList;  // 天气指数

    QLabel* lblHigh;  // 高温
    QLabel* lblLow;   // 低温

    QList<QLabel*> mFxList;  // 风向
    QList<QLabel*> mFlList;  // 风力


    QLabel*lblDate;  //日期


    //定义一个天气列表,用于模拟多个城市
    QList<WeatherInfo> WeatherInfoList;
    qint8 cityIndex;



private:
    void initTop();
    void initLeft();
    void initRight();

    void  initData();//初始化数据
    void updateUI();//更新UI界面

    // 绘制高低温曲线
    void paintHighCurve();
    void paintLowCurve();

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
};
#endif // WIDGET_H
